package com.zzr.demo.rabbitmq;

import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author: xiaomi
 * @date: 2021/8/24
 * @description: /**
 * * 定制RabbitTemplate
 * * 1、服务收到消息就会回调
 * *      1、spring.rabbitmq.publisher-confirms: true
 * *      2、设置确认回调 ConfirmCallback
 * * 2、消息正确抵达队列就会进行回调
 * *      1、spring.rabbitmq.publisher-returns: true
 * *         spring.rabbitmq.template.mandatory: true
 * *      2、设置确认回调ReturnCallback
 * *
 * * 3、消费端确认(保证每个消息都被正确消费，此时才可以broker删除这个消息)
 * *  1、默认自动确认：只要消息接收到，客户端就会自动确认；服务端就会移除这个消息；
 * *      问题：消息丢失：
 * *          收到很多消息，自动回复Broker Acknowledge；但是实际只有一个处理完成，此时 Consumer 宕机，造成消息丢失。
 * *          ——手动确认；
 * *
 * *  2、手动确认：
 * *      spring.rabbitmq.listener.simple.acknowledge-mode=manual
 * *      只要没有执行 ack ，消息一致是 unacked；直到信道关闭，消息又恢复到 ready 状态
 * *
 */
@SpringBootApplication
@EnableRabbit//使用本注解开启监听消息！
public class RabbitMqSampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(RabbitMqSampleApplication.class, args);
    }
}
